cssparser: Make _gtk_css_parser_try a macro
authorTimm Bäder <mail@baedert.org>
Sat, 19 Jan 2019 17:32:00 +0000 (18:32 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 29 Jan 2019 04:03:26 +0000 (05:03 +0100)
We almost always pass a constant string to it, so use a macro and try to
trick the compiler into evaluating the 2(!) strlen() calls at compile
time.

gtk/gtkcssparser.c
gtk/gtkcssparserprivate.h

index a840d9fbbdecfba3b0f259ad5c70fea163fb203a..43d6699d03ddd8e9fc85131c24d3551db7379d90 100644 (file)
@@ -298,17 +298,18 @@ _gtk_css_parser_skip_whitespace (GtkCssParser *parser)
 }
 
 gboolean
-_gtk_css_parser_try (GtkCssParser *parser,
-                     const char   *string,
-                     gboolean      skip_whitespace)
+gtk_css_parser_try_len (GtkCssParser *parser,
+                        const char   *string,
+                        gsize         string_len,
+                        gboolean      skip_whitespace)
 {
   g_return_val_if_fail (GTK_IS_CSS_PARSER (parser), FALSE);
   g_return_val_if_fail (string != NULL, FALSE);
 
-  if (g_ascii_strncasecmp (parser->data, string, strlen (string)) != 0)
+  if (g_ascii_strncasecmp (parser->data, string, string_len) != 0)
     return FALSE;
 
-  parser->data += strlen (string);
+  parser->data += string_len;
 
   if (skip_whitespace)
     _gtk_css_parser_skip_whitespace (parser);
index 5bc2ad691b1fdb3043cb62426cf0b89eecc22b89..3fb30f91369125ff1aa7fe235b7c882e235b0642 100644 (file)
@@ -66,8 +66,10 @@ gboolean        _gtk_css_parser_is_string         (GtkCssParser          *parser
  * however is fine to call if you don’t know yet if the token is a foo or a bar,
  * you can _try_bar() if try_foo() failed.
  */
-gboolean        _gtk_css_parser_try               (GtkCssParser          *parser,
+#define        _gtk_css_parser_try(p, s, skip) (gtk_css_parser_try_len (p, s, strlen(s), skip))
+gboolean        gtk_css_parser_try_len            (GtkCssParser          *parser,
                                                    const char            *string,
+                                                   gsize                  string_len,
                                                    gboolean               skip_whitespace);
 char *          _gtk_css_parser_try_ident         (GtkCssParser          *parser,
                                                    gboolean               skip_whitespace);